home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / prgtools / programm.ing / m2posx10.zoo / m2posix.10 / src / dir.dpp < prev    next >
Encoding:
Modula Definition  |  1993-11-12  |  12.6 KB  |  227 lines

  1. DEFINITION MODULE dir;
  2. __DEF_SWITCHES__
  3. #ifdef HM2
  4. #ifdef __LONG_WHOLE__
  5. (*$!i+: Modul muss mit $i- uebersetzt werden! *)
  6. (*$!w+: Modul muss mit $w- uebersetzt werden! *)
  7. #else
  8. (*$!i-: Modul muss mit $i+ uebersetzt werden! *)
  9. (*$!w-: Modul muss mit $w+ uebersetzt werden! *)
  10. #endif
  11. #endif
  12. (*****************************************************************************)
  13. (* Funktionen, die Verzeichnisse bearbeiten.                                 *)
  14. (*                                                                           *)
  15. (* Ein Fehler ist immer dann aufgetreten, wenn bei Funktionen mit Typ INTEGER*)
  16. (* ein negativer Wert zurueckgegeben wird.                                   *)
  17. (* Die genaue Fehlerursache kann bei Bedarf ueber "err.errno" und die ent-   *)
  18. (* sprechenden Konstanten ermittelt werden. Die Funktionen veraendern "errno"*)
  19. (* nur dann, wenn ein Fehler aufgetreten ist, bei erfolgreicher Ausfuehrung  *)
  20. (* wird "errno" nicht veraendert.                                            *)
  21. (*                                                                           *)
  22. (* GEMDOS:                                                                   *)
  23. (* Die Eigenschaften der Funktionen unter dem ``blanken'' GEMDOS sind z.T.   *)
  24. (* stark eingeschraenkt; unter dem Stichwort GEMDOS ist deswegen immer       *)
  25. (* angegeben, in wieweit die Funktion emuliert werden kann. Ist MiNT-Unter-  *)
  26. (* stuetzung angegeben, so ist unter der Betriebssystemerweiterung MiNT      *)
  27. (* eine bessere Unterstuetzung der Funktionen zu erwarten; wie weit diese    *)
  28. (* geht, ist unter dem Stichwort MiNT angegeben.                             *)
  29. (* --------------------------------------------------------------------------*)
  30. (* 07-Nov-93, Holger Kleinschmidt                                            *)
  31. (*****************************************************************************)
  32.  
  33. FROM SYSTEM IMPORT
  34. (* TYPE *) ADDRESS;
  35.  
  36. FROM types IMPORT
  37. (* TYPE *) StrPtr, StrRange;
  38.  
  39. FROM file IMPORT
  40. (* TYPE *) modeT;
  41.  
  42. (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
  43.  
  44. TYPE
  45.   (* Der folgende Typ ist nicht opak, sondern als ADDRESS deklariert, damit
  46.      ein direkter Vergleich mit types.NULL moeglich ist.
  47.    *)
  48.   DIR = ADDRESS;
  49.  
  50. TYPE
  51.   DirentPtr = POINTER TO DirentRec;
  52.  
  53.   DirentRec = RECORD
  54.     dName : StrPtr; (* Mit Nullbyte abgeschlossen, keine Laengenbegrenzung *)
  55.     (* Weitere Elemente, wie z.B. 'dIno', sind nicht standardisiert *)
  56.   END;
  57.  
  58. (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
  59.  
  60.  PROCEDURE chdir ((* EIN/ -- *) REF dir : ARRAY OF CHAR ): INTEGER;
  61.  
  62. (*--------------------------------------------------------------------------
  63.  | Setzt das neue aktuelle Verzeichnis auf <dir>, das bei allen relativen   |
  64.  | Pfadangaben benutzt wird.                                                |
  65.  |                                                                          |
  66.  | GEMDOS: Keine Besonderheiten.                                            |
  67.  |   MiNT: -""-                                                             |
  68.   --------------------------------------------------------------------------*)
  69.  
  70.  PROCEDURE getcwd ((* EIN/ -- *) buf    : StrPtr;
  71.                    (* EIN/ -- *) bufsiz : StrRange ): StrPtr;
  72.  
  73. (*--------------------------------------------------------------------------
  74.  | In <buf>^ wird ein absoluter Pfad des augenblicklichen Arbeitsverzeich-  |
  75.  | nisses abgelegt. <bufsiz> bezeichnet den Platz in <buf> fuer Pfad ein-   |
  76.  | schliesslich Nullbyte. Der Pfad ist immer mit einem Nullbyte abgeschlos- |
  77.  | sen. Wenn <buf> nicht gross genug ist, wird ein Fehler gemeldet und NULL |
  78.  | als Funktionswert zurueckgeliefert, <buf>^ ist dann undefiniert; sonst   |
  79.  | ist der Funktionswert gleich <buf>.                                      |
  80.  |                                                                          |
  81.  | GEMDOS: Auch wenn <bufsiz> kleiner als 'PATHMAX' ist, wird intern min-   |
  82.  |         destens ein Puffer dieser Groesse bereitgestellt, damit ein zu   |
  83.  |         kleiner Wert sauber mit einer Fehlermeldung statt mit einem      |
  84.  |         Absturz wegen Ueberschreiben fremden Speichers abgefangen wird.  |
  85.  |   MiNT: Keine Besonderheiten                                             |
  86.   --------------------------------------------------------------------------*)
  87.  
  88.  
  89.  PROCEDURE mkdir ((* EIN/ -- *) REF dir  : ARRAY OF CHAR;
  90.                   (* EIN/ -- *)     mode : modeT         ): INTEGER;
  91.  
  92. (*--------------------------------------------------------------------------
  93.  | Es wird ein neues Verzeichnis mit Namen <dir> und der Zugriffsberechti-  |
  94.  | gung <mode> angelegt; die Dateierstellungsmaske wird beruecksichtigt.    |
  95.  |                                                                          |
  96.  | GEMDOS: Das <mode>-Argument wird ignoriert.                              |
  97.  |   MiNT: Unterstuetzung von <mode> haengt vom Dateisystem ab.             |
  98.   --------------------------------------------------------------------------*)
  99.  
  100.  
  101.  PROCEDURE rmdir ((* EIN/ -- *) REF dir : ARRAY OF CHAR ): INTEGER;
  102.  
  103. (*--------------------------------------------------------------------------
  104.  | Das leere Verzeichnis <dir> wird geloescht.                              |
  105.  |                                                                          |
  106.  | GEMDOS: Keine Besonderheiten.                                            |
  107.  |   MiNT: -""-                                                             |
  108.   --------------------------------------------------------------------------*)
  109.  
  110.  
  111.  
  112.  PROCEDURE link ((* EIN/ -- *) REF old : ARRAY OF CHAR;
  113.                  (* EIN/ -- *) REF new : ARRAY OF CHAR ): INTEGER;
  114.  
  115. (*--------------------------------------------------------------------------
  116.  | Es wird ein neuer Dateieintrag <new> fuer die Datei mit dem Eintrag <old>|
  117.  | angelegt (Hard Link), sodass die entsprechende Datei ueber beide Namen   |
  118.  | angesprochen werden kann. <old> und <new> muessen sich auf demselben     |
  119.  | Dateisystem befinden.                                                    |
  120.  |                                                                          |
  121.  | GEMDOS: Liefert immer -1 (errno = 'ENOSYS').                             |
  122.  |   MiNT: Unterstuetzung haengt vom Dateisystem ab.                        |
  123.   --------------------------------------------------------------------------*)
  124.  
  125.  
  126.  PROCEDURE unlink ((* EIN/ -- *) REF file : ARRAY OF CHAR ): INTEGER;
  127.  
  128. (*--------------------------------------------------------------------------
  129.  | Der Dateieintrag <file> wird geloescht. Wenn keine weiteren Links auf die|
  130.  | entsprechende Datei bestehen, wird die Datei komplett geloescht. Ist die |
  131.  | Datei zur Zeit geoeffnet, wird die Datei erst nach dem Schliessen ge-    |
  132.  | loescht.                                                                 |
  133.  |                                                                          |
  134.  | GEMDOS: Da es hier keine Links gibt, wird einfach die Datei geloescht.   |
  135.  |         Die Datei darf nicht geoeffnet sein.                             |
  136.  |   MiNT: Unterstuetzung haengt vom Dateisystem ab.                        |
  137.   --------------------------------------------------------------------------*)
  138.  
  139.  
  140.  PROCEDURE rename ((* EIN/ -- *) REF old : ARRAY OF CHAR;
  141.                    (* EIN/ -- *) REF new : ARRAY OF CHAR ): INTEGER;
  142.  
  143. (*--------------------------------------------------------------------------
  144.  | Benennt die Datei oder das Verzeichnis <old> in <new> um. Wenn <new>     |
  145.  | existiert, wird es vorher geloescht. <old> und <new> muessen sich auf dem|
  146.  | gleichen Dateisystem befinden.                                           |
  147.  |                                                                          |
  148.  | GEMDOS: Verzeichnisse koennen erst ab TOS 1.04 umbenannt werden.         |
  149.  |         Als Dateisystem fungiert hier ein logisches Laufwerk.            |
  150.  |         Die Datei darf nicht geoeffnet sein.                             |
  151.  |   MiNT: -""-                                                             |
  152.   --------------------------------------------------------------------------*)
  153.  
  154.  
  155.  
  156.  PROCEDURE opendir ((* EIN/ -- *) REF dir : ARRAY OF CHAR ): DIR;
  157.  
  158.  PROCEDURE readdir ((* EIN/ -- *) dirp : DIR ): DirentPtr;
  159.  
  160.  PROCEDURE rewinddir ((* EIN/ -- *) dirp : DIR );
  161.  
  162.  PROCEDURE closedir ((* EIN/AUS *) VAR dirp : DIR ): INTEGER;
  163.  
  164. (*--------------------------------------------------------------------------
  165.  | "opendir()":                                                             |
  166.  |     'oeffnet' das Verzeichnis <dirname>, d.h. trifft die Vorbereitungen  |
  167.  |     fuer "readdir()". Der Funktionswert ist als Identifikation des Ver-  |
  168.  |     zeichnisses fuer die anderen Verzeichnis-Prozeduren noetig. Konnte   |
  169.  |     das Verzeichnis nicht geoeffnet werden, wird NULL zurueckgeliefert.  |
  170.  | "readdir()":                                                             |
  171.  |     Ein Verweis auf den physikalisch naechsten Eintrag des Verzeichnisses|
  172.  |     <dirp> wird zurueckgeliefert, oder NULL, falls kein weiterer Eintrag |
  173.  |     existiert.                                                           |
  174.  |     ACHTUNG: Der Verweis bleibt nur solange gueltig, wie kein weiterer   |
  175.  |     Aufruf von "readdir()" mit dem gleichen <dirp> erfolgt!              |
  176.  | "rewinddir()":                                                           |
  177.  |     Setzt das Verzeichnis <dirp> wieder auf den Anfang zurueck, sodass   |
  178.  |     ein "readdir()" die physikalisch erste Datei (".") liefert.          |
  179.  | "closedir()":                                                            |
  180.  |     Nach dem Auslesen des Verzeichnisses muss dieses wieder geschlossen  |
  181.  |     werden. Falls das Schliessen erfolgreich war, wird <dirp> auf NULL   |
  182.  |     gesetzt.                                                             |
  183.  |                                                                          |
  184.  | GEMDOS: Es werden alle Dateien ausser dem Diskettennamen geliefert.      |
  185.  |         Diese Routinen sind anstelle von "Fsfirst/Fsnext" zu benutzen.   |
  186.  |   MiNT: -""-                                                             |
  187.   --------------------------------------------------------------------------*)
  188.  
  189.  
  190. (* noch nicht POSIX: *)
  191.  PROCEDURE symlink ((* EIN/ -- *) REF old : ARRAY OF CHAR;
  192.                     (* EIN/ -- *) REF new : ARRAY OF CHAR ): INTEGER;
  193.  
  194. (*--------------------------------------------------------------------------
  195.  | Es wird ein symbolischer Dateieintrag <new> fuer die Datei mit dem Datei-|
  196.  | eintrag <old> angelegt (Symbolic Link), sodass die entsprechende Datei   |
  197.  | ueber beide Namen angesprochen werden kann. <old> und <new> muessen sich |
  198.  | nicht auf dem gleichen Dateisystem befinden.                             |
  199.  |                                                                          |
  200.  | GEMDOS: Liefert immer -1 (errno = 'ENOSYS').                             |
  201.  |   MiNT: Unterstuetzung haengt vom Dateisystem ab.                        |
  202.   --------------------------------------------------------------------------*)
  203.  
  204. (* noch nicht POSIX: *)
  205.  PROCEDURE readlink ((* EIN/ -- *) REF lname  : ARRAY OF CHAR;
  206.                      (* EIN/ -- *)     buf    : StrPtr;
  207.                      (* EIN/ -- *)     bufsiz : StrRange      ): INTEGER;
  208.  
  209. (*--------------------------------------------------------------------------
  210.  | Wenn <lname> der Name eines ``Symbolischen Links'' ist, wird in <buf>^   |
  211.  | der bei "symlink()" angegebene Name der zugehoerigen Zieldatei abgelegt; |
  212.  | Der Name ist NICHT mit einem Nullbyte abgeschlossen, deshalb muss der    |
  213.  | Rueckgabewert der Funktion verwendet werden, um den String mit einem     |
  214.  | Nullbyte abzuschliessen (wenn der Platz dafuer noch ausreicht)!!!        |
  215.  | Als Funktionswert wird die Laenge von <buf>^ oder -1 (fuer Fehler) zu-   |
  216.  | rueckgegeben. <bufsiz> ist der Platz in <buf>^. Es wird KEIN Fehler      |
  217.  | gemeldet, wenn <buf> nicht gross genug war, den gesamten Namen aufzuneh- |
  218.  | men, es wird dann lediglich auf <bufsiz> gekuerzt! Die tatsaechliche     |
  219.  | Laenge eines symbolischen Links kann lediglich ueber "lstat(lname, st)"  |
  220.  | und 'st.stSize' ermittelt werden.                                        |
  221.  |                                                                          |
  222.  | GEMDOS: Liefert immer -1 (errno = 'ENOSYS').                             |
  223.  |   MiNT: Unterstuetzung haengt vom Dateisystem ab.                        |
  224.   --------------------------------------------------------------------------*)
  225.  
  226. END dir.
  227.